// CoachSynchronization.h

// Rozhranie pre synchronizaciu kouca

#ifndef COACHSYNCHRONIZATION_H
#define COACHSYNCHRONIZATION_H

#include "Common/Interfaces/Interface.h"
#include "Common/Protocol/ParseStructs.h"

// Synchronizacia ulohy rozhoduje, kedy sa podnikne akcia
class CoachSynchronizationInterface : public Interface
{
public:
	// Konstruktor
	CoachSynchronizationInterface() : Interface("Coach synchronization interface", "v0.0.1") {}
	// Destruktor
	virtual ~CoachSynchronizationInterface() {}

	// Nasledujuce funkcie su volane po obdrzani spravy
	
	// Handler pre vnimanie zvuku
	// parameter time: cyklus, v ktorom bola sprava povedana
	// parameter our: ak rozpraval nas hrac -> true, alebo superov hrac -> false
	// parameter cislo dresu
	// parameter sprava
	virtual void OnHear(int time, bool our, int uniformNumber, const char* message) = 0;

	// Handler pre spravy na zmenu modu (spravy rozhodcu)
	// parameter time: cyklus, v ktotom bol zmeneny herny mod
	// parameter mode: herny mod, ktory je teraz aktualny
	virtual void OnChangeMode(int time, PlayMode mode) = 0;

	// Handler pre zmenu typu hraca
	// parameter number: ktory hrac sa zmenil
	// pareamter type: aky typ je teraz
	virtual void OnChangePlayerType(unsigned number, int type) = 0;

	// Handler pre prvu spravu po pripojeni sa na server
	// parameter side: true -> vlavo, false -> vpravo
	virtual void OnInit(bool side) = 0;

	// Handler pre spravy typu 'ok team_graphic'
	virtual void OnOkTeamGraphic(int x, int y) = 0;

	// Handler pre informaciu o hetero hracskych typoch
	virtual void OnPlayerParam(const PLAYER_PARAMS* params) = 0;

	// Handler pre informaciu o jednom hetero (alebo normalonom) hracskom type
	virtual void OnPlayerType(int id, const PLAYER_TYPE* type) = 0;

	// Handler spravy pre informaciu o skore hry
	// parameter time: cyklus, v ktorom bola sprava poslana
	// parameter our: nase skore
	// parameter their: skore supera
	virtual void OnScore(int time, unsigned int our, unsigned int their) = 0;

	// Handler pre spravu typu see_global
	// parameter vi: informacia o hracoch a lopte
	virtual void OnSeeGlobal(const COACH_VISUAL_INFO* vi) = 0;

	// Handler pre zmenu serverovych parametrov
	virtual void OnServerParam(const SERVER_PARAMS* params) = 0;	
};

#endif // COACHSYNCHRONIZATION_H
